떡밥위키
최근 변경
최근 토론
특수 기능
파일 올리기
작성이 필요한 문서
고립된 문서
고립된 분류
분류가 되지 않은 문서
편집된 지 오래된 문서
내용이 짧은 문서
내용이 긴 문서
차단 내역
RandomPage
라이선스
IP 사용자
216.73.216.107
설정
다크 모드로 전환
로그인
서버 점검 공지
|
개인정보 처리방침 개정 안내
C(프로그래밍 언어)
(r1 문단 편집)
닫기
RAW 편집
미리보기
=== 코딩 스타일 === [include(틀:상세 내용, 문서명=코딩 스타일)] C언어는 스코프를 지정할 때 중괄호 쌍 { }을 사용한다. C언어는 whitespace(공백, 탭, 리턴 문자열)가 의미 없는 언어라서[* 정확히는 화이트 스페이스 문자들인 뉴 라인, 탭, 스페이스를 구분하지 않고 아무 whitespace 하나 이상은 공백 하나로 계산된다. 예외는 C언어/C++의 문법의 일부가 아닌 매크로로서, 무조건 뉴 라인을 이용해서 매크로의 끝을 구분지어야 하며 여러 줄에 걸쳐 작성할 경우 뉴 라인 이전에 역슬래시를 하나 추가해야 한다.] 여는 중괄호를 엔터를 쳐서 다음 줄에 놓는 방법과, 이전 표현 바로 옆에 놓는 방식 두 가지 모두 가능하다. C언어계 책의 9할쯤은 전부 다 줄 수를 줄인 K&R 스타일이다. 반면 실제 코드의 스타일은 4할 정도뿐. 예제는 K&R 스타일로 쓰고서도 본문 중에 실제 작업에서는 Allman 스타일을 쓴다고 밝히는 저자도 있다. 2할은 기타 스타일. 그 중 Horstmann 스타일은, 중괄호 블록이 명료하게 보인다는 Allman의 장점과 적은 공간을 차지한다는 K&R의 장점을 합친 형태이다.[* {{{for(i=0;i<n;i++) { work(); } }}} 이런 식으로 쓰는 사람들도 있기는 있다. for과 if 등은 한 함수를 실행시킬 거면, 중괄호를 안 쳐도 되긴 하다. 다만, 들여쓰기 잘못하면 피바람 분다. 함수가 한 개든 여러 개든 그냥 전부 중괄호를 치는 습관을 들이자.] 참고로, [[Clang]] 컴파일러의 일부인 clang-format을 사용하면 소스 코드의 스타일을 일괄적으로 정리하고 유지할 수 있다. C에서는 대입 연산자(=)가 값을 반환하기 때문에, 실수로 == 를 쓸 곳에 =를 하나만 찍는 오타를 범했을 경우, integer 값이 리턴되는 경우에는 역시 문제 없이 컴파일되고 직접 돌려서 해당 기능이 오작동을 하기 전까지 버그를 알아챌 수조차 없게 된다. 이 때문에 == 사용 시 lvalue에 일부러 상수항을 사용하는 프로그래머들도 있다.[* [[요다|Yoda]] condition이라고 불린다. [[스타워즈]]의 [[요다]]가 문장에 주어의 위치를 도치하던 것에서 유래.] 예를 들어, {{{#int a = 42; if(a == 37) { ... } }}} 같은 경우, 실수로 {{{ if(a = 37) }}}이라 쓰면 false가 아닌 true가 뜨며(a = 37이라는 expression의 값은 37이고 0이 아닌 값은 죄다 true로 간주된다.), a에 37이 대입돼버려 완전히 오작동을 하게 된다. 문제는, 컴파일이 문제 없이 돼서 버그 찾기가 더더욱 힘들어진다는 점. 상수항을 왼쪽으로 옮겨서 if(37 == a) 로 써주면, 37 = a라 썼을 때 당연히 말이 되지 않으니[* expression의 l-value에는 수정할 수 있는 값(a와 같은 변수 등)이 와야 하기 때문이다.] 컴파일 시 에러가 떠서 쉽게 알아챌 수 있다...라는 유명한 팁이 있지만, 사람의 직관과 맞지 않아 어색하게 느껴지기 때문에 일부러 익숙해지지 않으면 잘 쓰이지 않는다. 요새는 컴파일러가 좋아져서 이런 위험 코드는 대체로 경고 처리해준다.[* gcc 4.8 기준으로 'suggest parentheses around assignment used as truth value'(값을 진리 값으로 사용하는 assignment는 괄호를 씌우는 것을 권장함)라는 워닝 메시지가 뜬다.][* 보통 if 문 내부에 '''의도된''' 대입 연산자의 경우에는 {{{#if ((result = fn(...)) != NULL) { ... } }}} 같은 식으로 대입 표현식을 괄호로 감싼다.]
요약
문서 편집을
저장
하면 당신은 기여한 내용을
CC BY-NC-SA 2.0 KR
또는
기타 라이선스 (문서에 명시된 경우)
로 배포하고 기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다. 이
동의는 철회할 수 없습니다.
비로그인 상태로 편집합니다. 로그인하지 않은 상태로 문서 편집을 저장하면, 편집 역사에 본인이 사용하는 IP(216.73.216.107) 주소 전체가 영구히 기록됩니다.
저장
사용자
216.73.216.107
IP 사용자
로그인
회원가입
최근 변경
[불러오는 중...]
최근 토론
[불러오는 중...]